<?php
/**
 * CategorySharing
 *
 * Classe catégorie pour le revenue sharing
 *
 * @author Valentin
 */
 
class CategorySharing extends Category {
    protected $id;                // Identifiant
    protected $nom;               // Nom de la catégorie
    protected $descriptif;        // Descriptif de la catégorie
    protected $slug;              // Slug de la catégorie
	
    protected $bestSales;         //Tableau des meilleurs produits de la rubrique


    function __construct($id='', $params=array()) {
        if($id!='') {
            $this->id = $id;
            foreach($params as $key => $p) {
                $this->$key = $p;
            }
        }
    }

    public function getLastProducts($limit=10) {
        if(isset($this->lastProducts)) return $this->lastProducts;
        $db = Database::getInstance();
        $this->lastProducts = array();
        $sql = "SELECT p.*
                FROM produits p
                INNER JOIN sous_sous_famille ssf ON p.famille_id = ssf.id
                INNER JOIN sous_famille sf ON ssf.id_sous_famille = sf.id
                WHERE sf.id_famille = '".$this->id."'
                AND p.etat = 1
                ORDER BY updated DESC
                LIMIT ".$limit;
        $result = $db->query($sql);
        foreach($result as $line) {
            $this->lastProducts[] = new Product($line['id'], $line);
        }
        return $this->lastProducts;
    }
    public function getAllproducts($limit_start = "", $limit_end = "", $order = ""){
        $db = Database::getInstance();
        $classement = "";
        switch($order){
            case 'wl':
                $classement.=" ORDER BY nb_wl";
                break;
            case'sales':
                $classement.=" ORDER BY nb_vente";
                break;
            case 'price_asc':
                $classement.=" ORDER BY coalesce(solde_prix,prix) ASC";
                break;
            case 'price_desc':
                $classement.=" ORDER BY coalesce(solde_prix,prix) DESC";
                break;
            default:
                $classement.=" ORDER BY nb_wl";
                break;
        }
        $sql = "(SELECT produits.*
            FROM produits
            INNER JOIN sous_sous_famille ON sous_sous_famille.id = produits.famille_id
            INNER JOIN sous_famille ON sous_sous_famille.id_sous_famille = sous_famille.id
            WHERE sous_famille.id_famille = '".$this->id."'
            AND produits.etat=1
            AND (NOW() BETWEEN solde_date_debut
            AND solde_date_fin)
            )
            UNION
            (SELECT produits.id, produits.brand_id, produits.famille_id, produits.bigtag_id, produits.nom, produits.ref, produits.prix, produits.stock, produits.nb_vue, produits.nb_wl, produits.vignette, produits.photo_id, produits.nb_vente, produits.descriptif, produits.composition, produits.entretient, produits.etat, produits.date_exp, produits.hash, produits.added, produits.updated, null AS solde_prix, produits.solde_date_debut, produits.solde_date_fin
            FROM produits
            INNER JOIN sous_sous_famille ON sous_sous_famille.id = produits.famille_id
            INNER JOIN sous_famille ON sous_sous_famille.id_sous_famille = sous_famille.id
            WHERE sous_famille.id_famille = '".$this->id."'
            AND produits.etat=1
            AND ((NOW() NOT BETWEEN solde_date_debut AND solde_date_fin)
            OR ((solde_date_debut = '0000-00-00' OR solde_date_fin = '0000-00-00'))))".$classement;

        if(($limit_start==0 || $limit_start!="") && $limit_end!=""){
            $sql.=" LIMIT ".$limit_start.", ".$limit_end;
        }
        $result = $db->query($sql);
        $list_products = array();
        foreach($result as $line){
            $list_products[] = new Product($line['id'], $line);
        }
        return $list_products;
    }
    public function getProductsInPriceRange($min, $max, $limit_start="", $limit_end="", $order="wl"){
        $db = Database::getInstance();
        $classement = "";
        switch($order){
            case 'wl':
                $classement.=" ORDER BY nb_wl";
                break;
            case'sales':
                $classement.=" ORDER BY nb_vente";
                break;
            case 'price_asc':
                $classement.=" ORDER BY coalesce(solde_prix,prix) ASC";
                break;
            case 'price_desc':
                $classement.=" ORDER BY coalesce(solde_prix,prix) DESC";
                break;
            default:
                $classement.=" ORDER BY nb_wl";
                break;
        }
        $sql = "(SELECT produits.*
            FROM produits
            INNER JOIN sous_sous_famille ON sous_sous_famille.id = produits.famille_id
            INNER JOIN sous_famille ON sous_sous_famille.id_sous_famille = sous_famille.id
            WHERE sous_famille.id_famille = '".$this->id."'
            AND produits.etat=1
            AND produits.solde_prix >= '".$min."'
            AND produits.solde_prix < '".$max."'
            AND (NOW() BETWEEN solde_date_debut
            AND solde_date_fin)
            )
            UNION
            (SELECT produits.id, produits.brand_id, produits.famille_id, produits.bigtag_id, produits.nom, produits.ref, produits.prix, produits.stock, produits.nb_vue, produits.nb_wl, produits.vignette, produits.photo_id, produits.nb_vente, produits.descriptif, produits.composition, produits.entretient, produits.etat, produits.date_exp, produits.hash, produits.added, produits.updated, null AS solde_prix, produits.solde_date_debut, produits.solde_date_fin
            FROM produits
            INNER JOIN sous_sous_famille ON sous_sous_famille.id = produits.famille_id
            INNER JOIN sous_famille ON sous_sous_famille.id_sous_famille = sous_famille.id
            WHERE sous_famille.id_famille = '".$this->id."'
            AND produits.etat=1
            AND produits.prix >= '".$min."'
            AND produits.prix < '".$max."'
            AND ((NOW() NOT BETWEEN solde_date_debut AND solde_date_fin)
            OR ((solde_date_debut = '0000-00-00' OR solde_date_fin = '0000-00-00'))
            AND (solde_prix<'".$min."' OR isnull(solde_prix))
            AND (solde_prix>= '".$max."' OR isnull(solde_prix))))".$classement;

        if(($limit_start==0 || $limit_start!="") && $limit_end!=""){
            $sql.=" LIMIT ".$limit_start.", ".$limit_end;
        }

        $result=$db->query($sql);
        $list_products=array();
        foreach($result as $line){
            $list_products[] = new Product($line['id'], $line);
        }
        return $list_products;
    }

    public function getProductsOfBrand($id_brand, $limit_start="", $limit_end="", $order=""){
        $db = Database::getInstance();

        $classement="";
        switch($order){
            case 'wl':
                $classement.=" ORDER BY nb_wl";
                break;
            case'sales':
                $classement.=" ORDER BY nb_vente";
                break;
            case 'price_asc':
                $classement.=" ORDER BY coalesce(solde_prix,prix) ASC";
                break;
            case 'price_desc':
                $classement.=" ORDER BY coalesce(solde_prix,prix) DESC";
                break;
            default:
                $classement.=" ORDER BY nb_wl";
                break;
        }
        $sql = "(SELECT produits.id, produits.brand_id, produits.famille_id, produits.bigtag_id, produits.nom, produits.ref, produits.prix, produits.stock, produits.nb_vue, produits.nb_wl, produits.vignette, produits.photo_id, produits.nb_vente, produits.descriptif, produits.composition, produits.entretient, produits.etat, produits.date_exp, produits.hash, produits.added, produits.updated, null AS solde_prix, produits.solde_date_debut, produits.solde_date_fin
            FROM produits
            INNER JOIN sous_sous_famille ON sous_sous_famille.id = produits.famille_id
            INNER JOIN sous_famille ON sous_sous_famille.id_sous_famille = sous_famille.id
            INNER JOIN brands ON brands.id = produits.brand_id
            WHERE sous_famille.id_famille = '".$this->id."'
            AND produits.etat=1
            AND brands.id = '".$id_brand."'
            AND (NOW() BETWEEN solde_date_debut
            AND solde_date_fin)
            )
            UNION
            (SELECT produits.*
            FROM produits
            INNER JOIN sous_sous_famille ON sous_sous_famille.id = produits.famille_id
            INNER JOIN sous_famille ON sous_sous_famille.id_sous_famille = sous_famille.id
            INNER JOIN brands ON brands.id = produits.brand_id
            WHERE sous_famille.id_famille = '".$this->id."'
            AND produits.etat=1
            AND brands.id = '".$id_brand."'
            AND ((NOW() NOT BETWEEN solde_date_debut AND solde_date_fin)
            OR ((solde_date_debut = '0000-00-00' OR solde_date_fin = '0000-00-00'))))".$classement;
        if(($limit_start==0 || $limit_start!="") && $limit_end!=""){
            $sql.=" LIMIT ".$limit_start.", ".$limit_end;
        }
        $result=$db->query($sql);
        $list_products=array();
        foreach($result as $line){
            $list_products[] = new Product($line['id'], $line);
        }
        return $list_products;
    }

    /*
     * Vendeurs
     */
    public function getVendors() {
        $db = Database::getInstance();
        $sql = "SELECT v.*
                FROM produits p
                INNER JOIN sous_sous_famille ssf ON ssf.id = p.famille_id
                INNER JOIN sous_famille sf ON sf.id = ssf.id_sous_famille
                INNER JOIN brands b ON b.id=p.brand_id
                INNER JOIN brands_vendors_link bvl ON bvl.brand_id = b.id
                INNER JOIN vendors v ON v.id = bvl.vendor_id
                WHERE sf.id_famille = '".$this->id."' AND p.etat = '1'
                GROUP BY bvl.vendor_id";
        $result = $db->query($sql);
        $vendors = array();
        foreach($result as $vendor) {
            $vendors[] = new Vendor($vendor['id'], $vendor);
        }
        return $vendors;
    }
	public function getBrands() {
		$db = Database::getInstance();
        $sql = "SELECT b.*
                FROM produits p
                INNER JOIN sous_sous_famille ssf ON ssf.id = p.famille_id
                INNER JOIN sous_famille sf ON sf.id = ssf.id_sous_famille
                INNER JOIN brands b ON b.id=p.brand_id
                WHERE sf.id_famille = '".$this->id."' AND p.etat = '1'
                GROUP BY p.brand_id";
        $result = $db->query($sql);
        $brands = array();
        foreach($result as $brand) {
            $brands[] = new Brand($brand['id'], $brand);
        }
        $brands = $_SESSION['sharing']->filterBrands($brands);
        return $brands;
	}


    /*
     * Méthodes statiques
     */
    public static function get($slug) {
        $db = Database::getInstance();
        $sql ="SELECT * 
			   FROM famille  
			   WHERE slug = '".$slug."'
			   AND famille.id NOT IN (
			   		SELECT id_famille 
					FROM sharing_famille
					WHERE id_sharing = '".$_SESSION['sharing']['id']."'
			   )";
        $result = $db->query($sql);
        if(sizeof($result) > 0) 
			return new CategorySharing($result[0]['id'], $result[0]);
		return false;     
    }
}
?>
